package com.yq.bdm.utils;

import java.util.ArrayList;
import java.util.List;

import com.yq.bdm.entity.MenuPermissionEntity;

/**
 * 获取菜单数据，组合成树结构
 * @author Administrator
 *
 */
public class TreeList {
	
	public List<MenuPermissionEntity> testQueryMenuList(List<MenuPermissionEntity> rootMenu) {
	    // 最后的结果
	    List<MenuPermissionEntity> menuList = new ArrayList<MenuPermissionEntity>();
	    // 先找到所有的一级菜单
	    for (int i = 0; i < rootMenu.size(); i++) {
	        // 一级菜单的parentId为0
	        if (rootMenu.get(i).getParentPermissionId() == 0) {
	            menuList.add(rootMenu.get(i));
	        }
	    }
	    // 为一级菜单设置子菜单，getChild是递归调用的
	    for (MenuPermissionEntity menu : menuList) {
	        menu.setChildMenus(getChild(menu.getPermissionId(), rootMenu));
	    }
	    return menuList;
	}

	/**
	 * 递归查找子菜单
	 * @param id  当前菜单id
	 * @param rootMenu  要查找的列表
	 * @return
	 */
	private List<MenuPermissionEntity> getChild(long id, List<MenuPermissionEntity> rootMenu) {
	    // 子菜单
	    List<MenuPermissionEntity> childList = new ArrayList<>();
	    for (MenuPermissionEntity menu : rootMenu) {
	        // 遍历所有节点，将父菜单id与传过来的id比较
	        if (menu.getParentPermissionId() != null || menu.getParentPermissionId() != 0) {
	            if (menu.getParentPermissionId().equals(id)) {
	                childList.add(menu);
	            }
	        }
	    }
	    // 把子菜单的子菜单再循环一遍
	    for (MenuPermissionEntity menu : childList) {// 没有url子菜单还有子菜单
	        if (menu.getUrl() != null || !"".equals(menu.getUrl())) {
	            // 递归
	            menu.setChildMenus(getChild(menu.getPermissionId(), rootMenu));
	        }
	    } // 递归退出条件
	    if (childList.size() == 0) {
	        return null;
	    }
	    return childList;
	}
}
